Fix dummy domains (DOM_IO and DOM_XEN) creation so that
authorkfraser@dhcp93.uk.xensource.com <kfraser@dhcp93.uk.xensource.com>
Thu, 1 Jun 2006 15:39:42 +0000 (16:39 +0100)
committerkfraser@dhcp93.uk.xensource.com <kfraser@dhcp93.uk.xensource.com>
Thu, 1 Jun 2006 15:39:42 +0000 (16:39 +0100)
list heads are initialised.
Signed-off-by: Keir Fraser <keir@xensource.com>
xen/arch/ia64/xen/domain.c
xen/arch/x86/mm.c
xen/common/domain.c
xen/common/schedule.c
xen/include/xen/sched.h

index 88a2b9c5781d39a08c14751718d6e64d7c247715..b4d53ed6bec4c3b269789619ef5ee30b13026810 100644 (file)
@@ -92,26 +92,16 @@ alloc_dom_xen_and_dom_io(void)
      * Any Xen-heap pages that we will allow to be mapped will have
      * their domain field set to dom_xen.
      */
-    dom_xen = alloc_domain();
+    dom_xen = alloc_domain(DOMID_XEN);
     BUG_ON(dom_xen == NULL);
-    spin_lock_init(&dom_xen->page_alloc_lock);
-    INIT_LIST_HEAD(&dom_xen->page_list);
-    INIT_LIST_HEAD(&dom_xen->xenpage_list);
-    atomic_set(&dom_xen->refcnt, 1);
-    dom_xen->domain_id = DOMID_XEN;
 
     /*
      * Initialise our DOMID_IO domain.
      * This domain owns I/O pages that are within the range of the page_info
      * array. Mappings occur at the priv of the caller.
      */
-    dom_io = alloc_domain();
+    dom_io = alloc_domain(DOMID_IO);
     BUG_ON(dom_io == NULL);
-    spin_lock_init(&dom_io->page_alloc_lock);
-    INIT_LIST_HEAD(&dom_io->page_list);
-    INIT_LIST_HEAD(&dom_io->xenpage_list);
-    atomic_set(&dom_io->refcnt, 1);
-    dom_io->domain_id = DOMID_IO;
 }
 #endif
 
index 55c1e783345097d9af51fe92b76fa204148a34d9..594c34bb0a852afa8658a58e5bdd04452f3c3e18 100644 (file)
@@ -187,20 +187,16 @@ void arch_init_memory(void)
      * Any Xen-heap pages that we will allow to be mapped will have
      * their domain field set to dom_xen.
      */
-    dom_xen = alloc_domain();
-    spin_lock_init(&dom_xen->page_alloc_lock);
-    atomic_set(&dom_xen->refcnt, 1);
-    dom_xen->domain_id = DOMID_XEN;
+    dom_xen = alloc_domain(DOMID_XEN);
+    BUG_ON(dom_xen == NULL);
 
     /*
      * Initialise our DOMID_IO domain.
      * This domain owns I/O pages that are within the range of the page_info
      * array. Mappings occur at the priv of the caller.
      */
-    dom_io = alloc_domain();
-    spin_lock_init(&dom_io->page_alloc_lock);
-    atomic_set(&dom_io->refcnt, 1);
-    dom_io->domain_id = DOMID_IO;
+    dom_io = alloc_domain(DOMID_IO);
+    BUG_ON(dom_io == NULL);
 
     /* First 1MB of RAM is historically marked as I/O. */
     for ( i = 0; i < 0x100; i++ )
index 19541d41cc77cf926b489dbf971a6f65a9f03f75..e98ef263f7f6eb33adbcaada64004fc6848d3ab8 100644 (file)
@@ -32,23 +32,14 @@ struct domain *domain_list;
 
 struct domain *dom0;
 
-struct domain *domain_create(domid_t dom_id, unsigned int cpu)
+struct domain *domain_create(domid_t domid, unsigned int cpu)
 {
     struct domain *d, **pd;
     struct vcpu *v;
 
-    if ( (d = alloc_domain()) == NULL )
+    if ( (d = alloc_domain(domid)) == NULL )
         return NULL;
 
-    d->domain_id = dom_id;
-
-    atomic_set(&d->refcnt, 1);
-
-    spin_lock_init(&d->big_lock);
-    spin_lock_init(&d->page_alloc_lock);
-    INIT_LIST_HEAD(&d->page_list);
-    INIT_LIST_HEAD(&d->xenpage_list);
-
     rangeset_domain_initialise(d);
 
     if ( !is_idle_domain(d) )
@@ -74,14 +65,14 @@ struct domain *domain_create(domid_t dom_id, unsigned int cpu)
     if ( !is_idle_domain(d) )
     {
         write_lock(&domlist_lock);
-        pd = &domain_list; /* NB. domain_list maintained in order of dom_id. */
+        pd = &domain_list; /* NB. domain_list maintained in order of domid. */
         for ( pd = &domain_list; *pd != NULL; pd = &(*pd)->next_in_list )
             if ( (*pd)->domain_id > d->domain_id )
                 break;
         d->next_in_list = *pd;
         *pd = d;
-        d->next_in_hashbucket = domain_hash[DOMAIN_HASH(dom_id)];
-        domain_hash[DOMAIN_HASH(dom_id)] = d;
+        d->next_in_hashbucket = domain_hash[DOMAIN_HASH(domid)];
+        domain_hash[DOMAIN_HASH(domid)] = d;
         write_unlock(&domlist_lock);
     }
 
index b2801695c7c479d33973e2e040f759365afe4818..bbe273b4430570fec4caaf19fbf826d72cb0a78f 100644 (file)
@@ -99,12 +99,20 @@ void vcpu_runstate_get(struct vcpu *v, struct vcpu_runstate_info *runstate)
     }
 }
 
-struct domain *alloc_domain(void)
+struct domain *alloc_domain(domid_t domid)
 {
     struct domain *d;
 
-    if ( (d = xmalloc(struct domain)) != NULL )
-        memset(d, 0, sizeof(*d));
+    if ( (d = xmalloc(struct domain)) == NULL )
+        return NULL;
+
+    memset(d, 0, sizeof(*d));
+    d->domain_id = domid;
+    atomic_set(&d->refcnt, 1);
+    spin_lock_init(&d->big_lock);
+    spin_lock_init(&d->page_alloc_lock);
+    INIT_LIST_HEAD(&d->page_list);
+    INIT_LIST_HEAD(&d->xenpage_list);
 
     return d;
 }
index 0c0c31ad75dd992a688f2a371dc1dab27661eb07..f32b78b594697d77c5b5a65cc70b03f0718de688 100644 (file)
@@ -189,7 +189,7 @@ extern struct vcpu *idle_vcpu[NR_CPUS];
 struct vcpu *alloc_vcpu(
     struct domain *d, unsigned int vcpu_id, unsigned int cpu_id);
 
-struct domain *alloc_domain(void);
+struct domain *alloc_domain(domid_t domid);
 void free_domain(struct domain *d);
 
 #define DOMAIN_DESTROYED (1<<31) /* assumes atomic_t is >= 32 bits */
@@ -226,7 +226,7 @@ static inline void get_knownalive_domain(struct domain *d)
 }
 
 extern struct domain *domain_create(
-    domid_t dom_id, unsigned int cpu);
+    domid_t domid, unsigned int cpu);
 extern int construct_dom0(
     struct domain *d,
     unsigned long image_start, unsigned long image_len,